#ifndef PIEZA_H_
#define PIEZA_H_

#include <string>
#include "ManejadorArchivos.h"
#include <iostream>
#include <list>
#include "Sha1.h"

typedef struct {
	unsigned long int offsetInicial;
	unsigned long int offsetFinal;
} Offset;

class Pieza {
public:
	Pieza(const string &hash, unsigned long int numeroPieza, unsigned long int tamanio, ManejadorArchivos* manejadorArchivos);
	virtual ~Pieza();

	bool copiarBloque(const string &dato, unsigned long int offset);

	unsigned long int getNroPieza() const;
	unsigned long int getTamanio() const;
	unsigned long int getCantidadEscrita() const;
	bool estaCompleta() const;
	string getHash() const;

private:

	unsigned int nroPieza;
	unsigned long int tamanio;
	unsigned long int cantEscrita;
	bool completa;
	string hash;
	list<Offset> offsetsEscritos;
	ManejadorArchivos* manejadorArchivos;

	bool corroborarInterseccionOffsets(unsigned long int offsetInicial, unsigned long int offsetFinal);
};

#endif /* PIEZA_H_ */
